Модуль "Hide v.4.2"

Руководство пользователя

Основные возможности и характеристики

  1. Скрытие текста или новости в зависимости от количества комментариев, публикаций, а также значения N параметра;
  2. Добавлена возможность самостоятельно указывать какой параметр использовать для хайда (ранее это была репа, сейчас указывайте что хотите);
  3. Можна ставить хайд по какому-то одному (или двум) параметру;
  4. Поддержка VIP групп, на котрые действие хайда не распостраняется;
  5. Поддержка групп "провинившихся", которые не видят скрытый текст и скрытые новости независимо от их параметров;
  6. Пользователи со стажем менее Х дней не могут видеть скрытый текст независимо от их параметров;
  7. Пользователи с негативным N параметром не могут видеть скрытый текст;
  8. Возможность включения/выключения использования N параметра;
  9. При установке всех параметров равными нулю, скрытый текст/новость смогут видеть только VIP пользователи;
  10. "Быстрая кнопка" на панели бб-кодов;
  11. Гибкая настройка модуля, можна влючить/выключить любую функцию;
  12. Добавлена возможность использовать хайд в шаблонах;
  13. Изменена работа с датой, теперь всё точнее и "ровнее";
  14. Изменён баг когда параметры хайда уходили в минус;
  15. Добавлена полная совместимость тегов хайда с другими модулями (тоесть в любом модуле, который выводит информацию на главную, можна использовать теги хайда);
  16. Теперь модуль полностью работает в комментариях;

Установка модуля

Будьте предельно внимательны, установка не лёгкая.

1. Загружаем на сервер содержимое паппки upload.
Незабываем выставить файлу /engine/data/protect_config.php права на запись.
2. Выполняем SQL запрос:
ALTER TABLE `dle_post` ADD `hide` VARCHAR( 255 ) NOT NULL DEFAULT ''
3. В файле engine/modules/functions.php ищем:
function formatsize($file_size) {
выше вставляем:
require_once ROOT_DIR.'/engine/modules/protect_hide.php';
4. В файле engine/modules/show.short.php ищем:
else $tpl->set_block( "'\\[hide\\](.*?)\\[/hide\\]'si", "<div class=\"quote\">" . $lang['news_regus'] . "</div>" );
ниже вставляем:
$tpl->set_block("#\[hide=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hide\]#ies", 'text_protect( $1 , $2 , $3 , "$4" )');
$tpl->set_block("#\[hidden=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hidden\]#ies", 'hidden_text( $1 , $2 , $3 , "$4" )');
5. В файле index.php ищем:
echo $tpl->result['main'];
меняем на:
$main_data = $tpl->result['main'];
/////////////////////////////////////////////////////////////////////////
require_once ROOT_DIR.'/engine/modules/protect_hide.php';
$main_data =  preg_replace("#\[hide=(.*?)\,(.*?)\,(.*?)\](.*?)\[\/hide\]#ie", 'text_protect( $1 , $2 , $3 , "$4" )', $main_data );
$main_data =  preg_replace("#\[hidden=(.*?)\,(.*?)\,(.*?)\](.*?)\[\/hidden\]#ie", 'hidden_text( $1 , $2 , $3 , "$4" )', $main_data );
/////////////////////////////////////////////////////////////////////////
echo $main_data;
6. В файле engine/modules/show.full.php ищем:
$tpl->copy_template = str_replace( "[xfvalue_{$preg_safe_name}]", stripslashes( $xfieldsdata[$value[0]] ), $tpl->copy_template );
			}
		}
ниже вставляем:
$tpl->set_block("#\[hide=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hide\]#ies", 'text_protect( $1 , $2 , $3 , "$4" )');
$tpl->set_block("#\[hidden=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hidden\]#ies", 'hidden_text( $1 , $2 , $3 , "$4" )');
7. В этом же файле ищем:
$tpl->set( '{group-name}', $user_group[$row['user_group']]['group_name'] );
ниже вставляем:
$tpl->set_block("#\[hide=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hide\]#ies", 'text_protect( $1 , $2 , $3 , "$4" )');
$tpl->set_block("#\[hidden=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hidden\]#ies", 'hidden_text( $1 , $2 , $3 , "$4" )');
8. Опять здесь же ищем:
if( ! $row['approve'] ) $allow_comments = false;
ниже вставляем:
include ENGINE_DIR . '/modules/hide_news.php';
9. Снова таки этот же файл, ищем:
if( ! $news_found and ! $perm ) msgbox( $lang['all_err_1'], "<b>
    {$user_group[$member_id['user_group']]['group_name']} </b> " . $lang['news_err_28'] );
заменяем на:
    if($perm==0 and $perm_acces==0 ) msgbox( "STOP!!!",$alert );
	elseif( ! $news_found and ! $perm ) msgbox( $lang['all_err_1'], "<b>
    {$user_group[$member_id['user_group']]['group_name']} </b> " . $lang['news_err_28'] );
10. В файле /engine/modules/static.php ищем:
$tpl->set( '[/print-link]', "</a>" );
ниже вставляем:
$tpl->set_block("#\[hide=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hide\]#ies", 'text_protect( $1 , $2 , $3 , "$4" )');
$tpl->set_block("#\[hidden=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hidden\]#ies", 'hidden_text( $1 , $2 , $3 , "$4" )');
11. В файле engine/ajax/addcomments.php ищем:
else $tpl->set_block( "'\\[hide\\](.*?)\\[/hide\\]'si", "<div class=\"quote\">" . $lang['news_regus'] . "</div>" );
ниже вставляем:
$tpl->set_block("#\[hide=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hide\]#ies", 'text_protect( $1 , $2 , $3 , "$4" )');
$tpl->set_block("#\[hidden=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hidden\]#ies", 'hidden_text( $1 , $2 , $3 , "$4" )');
12. В файле engine/ajax/editcomments.php ищем:
$comm_txt = preg_replace( "'\[hide\](.*?)\[/hide\]'si", "\\1", $comm_txt );
ниже вставляем:
$comm_txt =  preg_replace("#\[hide=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hide\]#ies", 'text_protect( $1 , $2 , $3 , "$4" )', $comm_txt );
$comm_txt =  preg_replace("#\[hidden=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hidden\]#ies", 'hidden_text( $1 , $2 , $3 , "$4" )', $comm_txt );
13. В файле engine/ajax/editnews.php ищем:
  	if( $config['files_allow'] == "yes" ) if( strpos( $news_txt, "[attachment=" ) !== false ) {
		$news_txt = show_attach( $news_txt, $id );
	}
ниже вставляем:
$news_txt =  preg_replace("#\[hide=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hide\]#ies", 'text_protect( $1 , $2 , $3 , "$4" )', $news_txt );
$news_txt =  preg_replace("#\[hidden=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hidden\]#ies", 'hidden_text( $1 , $2 , $3 , "$4" )', $news_txt );
14. В файле engine/modules/lastcomments.php ищем:
else $tpl->set_block( "'\\[hide\\](.*?)\\[/hide\\]'si", "<div class=\"quote\">" . $lang['news_regus'] . "</div>" );
ниже вставляем:
$tpl->set_block("#\[hide=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hide\]#ies", 'text_protect( $1 , $2 , $3 , "$4" )');
$tpl->set_block("#\[hidden=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hidden\]#ies", 'hidden_text( $1 , $2 , $3 , "$4" )');
15. В файле engine/modules/search.php ищем:
$txt = preg_replace( "/\[hide\](.*?)\[\/hide\]/ims", "", $txt );
ниже вставляем:
$txt = preg_replace("#\[hide=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hide\]#ies", 'text_protect( $1 , $2 , $3 , "$4" )', $txt );
$txt = preg_replace("#\[hidden=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hidden\]#ies", 'hidden_text( $1 , $2 , $3 , "$4" )', $txt );
16. Здесь же ищем:
else $tpl->set_block( "'\\[hide\\](.*?)\\[/hide\\]'si", "" );
ниже вставляем:
$tpl->set_block("#\[hide=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hide\]#ies", 'text_protect( $1 , $2 , $3 , "$4" )');
$tpl->set_block("#\[hidden=(.*?)\,(.*?)\,(.*?)\](.*?)\[/hidden\]#ies", 'hidden_text( $1 , $2 , $3 , "$4" )');
17. В файле engine/inc/addnews.php ищем:
if( ! $user_group[$member_id['user_group']]['admin_addnews'] ) {
	msg( "error", $lang['index_denied'], $lang['index_denied'] );
}
ниже вставляем:
/*---------------*/
require ROOT_DIR.'/engine/data/protect_config.php';
$sets['fb_msg']  = intval($sets['fb_msg']);
$sets['fb_news'] = intval($sets['fb_news']);
$sets['fb_repa'] = intval($sets['fb_repa']);
if ($sets['run_mod'] == 1 and $sets['news_hide'] == 1){ if ($sets['repa_used'] == 1) {
$body_rep="<tr><td width='20' style='padding-bottom:5px;'>Репутация</td><td style='padding-bottom:5px;'>
<input type='text' value='".$sets['fb_repa']."' size='5' name='needrepa' class=edit></td></tr>";}
else{$body_rep='';} $body="<tr><td width='20' style='padding-bottom:5px;'>Скрывать новость?</td>
<td style='padding-bottom:5px;'><select name='onoff'>
<option value='1'>&nbsp;&nbsp;&nbsp;Да&nbsp;&nbsp;</option>
<option value='0' selected='selected'>&nbsp;&nbsp;&nbsp;Нет&nbsp;&nbsp;</option>
</select></td></tr>".$body_rep."<tr>
<td width='20' style='padding-bottom:5px;'>Новостей</td><td style='padding-bottom:5px;'>
<input type='text' value=\"".$sets['fb_news']."\" size='5' name='neednews' class='edit'></td></tr>
<tr><td width='20' style='padding-bottom:5px;'>Сообщений</td><td style='padding-bottom:5px;'>
<input type='text' value=\"".$sets['fb_msg']."\" size='5' name='needmsg' class='edit'></td></tr>
<tr><td colspan='2'><div class='hr_line'></div></td></tr>";}else{$body='';}
/*--------------*/
18. Продолжаем искать:
access, symbol, flag, tags, metatitle
заменяем на:
access, symbol, flag, tags, metatitle, hide
19. Здесь же находим::
'$catalog_url', '1', '{$_POST['tags']}', '{$metatags['title']}'
заменяем на:
'$catalog_url', '1', '{$_POST['tags']}', '{$metatags['title']}', '{$protect}')
20. В файле engine/inc/editnews.php ищем:
if( ! $user_group[$member_id['user_group']]['admin_editnews'] ) {
	msg( "error", $lang['addnews_denied'], $lang['edit_denied'] );
}
ниже вставляем:
require ROOT_DIR.'/engine/data/protect_config.php';
21. Снова ищем:
$row = $db->super_query( "SELECT * FROM " . PREFIX . "_post where id = '$id'" );
ниже пишем:
/*---------------*/
if ($row['hide']!=''){
$pieces = explode("|", $row['hide']);
$need['use']  = intval($pieces[0]);
$need['repa'] = intval($pieces[1]);
$need['news'] = intval($pieces[2]);
$need['msg']  = intval($pieces[3]);
if ($sets['repa_used'] == 1) {$user['repa']=$member_id['repa'];}else{$user['repa']= 0;}
$user['news']=$member_id['news_num'];
$user['msg'] =$member_id['comm_num'];}
if ($need['use']==1){$checked['yes'] ="selected=\"selected\""; {$checked['no'] ="";}}
else {$checked['no'] ="selected=\"selected\""; {$checked['yes'] ="";}}
if ($sets['run_mod'] == 1 and $sets['news_hide'] == 1){
if ($sets['repa_used'] == 1) {
$body_rep="<tr><td width='20' style='padding-bottom:5px;'>Репутация</td><td style='padding-bottom:5px;'>
<input type='text' value='".$need['repa']."' size='5' name='needrepa' class=edit></td></tr>";}
else{$body_rep='';}
$body="<tr>
<td width='20' style='padding-bottom:5px;'>Скрывать новость?</td>
<td style='padding-bottom:5px;'><select name='onoff'>
<option value='1' ".$checked['yes'].">&nbsp;&nbsp;&nbsp;Да&nbsp;&nbsp;</option>
<option value='0' ".$checked['no'].">&nbsp;&nbsp;&nbsp;Нет&nbsp;&nbsp;</option>
</select></td></tr>
".$body_rep."
<tr><td width='20' style='padding-bottom:5px;'>Новостей</td><td style='padding-bottom:5px;'>
<input type='text' value=\"".$need['news']."\" size='5' name='neednews' class='edit'></td></tr>
<tr><td width='20' style='padding-bottom:5px;'>Сообщений</td><td style='padding-bottom:5px;'>
<input type='text' value=\"".$need['msg']."\" size='5' name='needmsg' class='edit'></td></tr>
<tr><td colspan='2'><div class='hr_line'></div></td></tr>";
}else{$body='';}
/*--------------*/
22. Находим:
$view_edit = isset( $_POST['view_edit'] ) ? intval( $_POST['view_edit'] ) : 0;
ниже вставляем:
    $post_hide['use']  =  intval( $_POST['onoff'] );
    $post_hide['news'] =  intval( $_POST['neednews'] );
    $post_hide['msg']  =  intval( $_POST['needmsg'] );
    $post_hide['repa'] =  intval( $_POST['needrepa'] );
    $hide=$db->safesql($post_hide['use'].'|'.$post_hide['repa'].'|'.$post_hide['news'].'|'.$post_hide['msg']);
23. Опять ищем (данный код находится дважды, следовательно и заменить его нужно тоже дважды):
view_edit='$view_edit', tags='{$_POST['tags']}', metatitle='{$metatags['title']}'
меняем на:
view_edit='$view_edit', tags='{$_POST['tags']}', metatitle='{$metatags['title']}', hide='{$hide}'
24. В файле admin.php ищем:
'iptools',
ниже вставляем:
'hide_admin',
25. В файле engine/inc/options.php ищем:
$options['filter'] = array (
ниже вставляем:
array (
'name' => "Hide",
'url' => "$PHP_SELF?mod=hide_admin",
'descr' => "Настройки модуля Hide",
'image' => "hide_img.png",
'access' => "admin"
),
26. В файле /engine/inc/include/inserttag.php ищем:
if(!defined('DATALIFEENGINE'))
{
  die("Hacking attempt!");
}
ниже вставляем:
require ROOT_DIR.'/engine/data/protect_config.php';
if ($sets['run_mod']==1 and $sets['fastbutton']==1){
$hide_fb['1'] = "<div id=\"b_spoiler\" class=\"editor_button\" onclick=\"fast_button()\">
<img title=\"[hide={$sets['fb_repa']},{$sets['fb_news']},{$sets['fb_msg']}]text[/hide]\"

src=\"/engine/skins/bbcodes/images/fast_hide.gif\" width=\"23\" height=\"25\" border=\"0\">
</div>";
$hide_fb['2'] = "<div id=\"b_spoiler\" class=\"editor_button\" onclick=\"fast_button1()\">
<img title=\"[hidden={$sets['fb_repa']},{$sets['fb_news']},{$sets['fb_msg']}]text[/hidden]\"

src=\"/engine/skins/bbcodes/images/fast_hide1.gif\" width=\"23\" height=\"25\" border=\"0\">
</div>";
}else{$hide_fb[1] = "";$hide_fb[2] = "";}
27. Тут же ищем:
-->
</SCRIPT>
выше вставляем:
function fast_button()
{doInsert("[hide={$sets['fb_repa']},{$sets['fb_news']},{$sets['fb_msg']}]", "[/hide]", false);}
function fast_button1()
{doInsert("[hidden={$sets['fb_repa']},{$sets['fb_news']},{$sets['fb_msg']}]", "[/hidden]", false);}
28. И наконец-то ищем:
<div id="b_spoiler" class="editor_button" onclick="simpletag('spoiler')">
<img src="engine/skins/bbcodes/images/spoiler.gif" width="23" height="25" border="0"></div>
ниже пишем:
{$hide_fb['1']}
{$hide_fb['2']}
29. В любом .css файле вашего шаблона в конце пишем:
.hide_stop {
    border: 1px dotted #FF0000;
    padding: 5px 5px 5px 5px;
    background: #FFEAEA;
}

.hide_good {
    border: 1px dotted #00CC00;
    padding: 5px 5px 5px 5px;
    background: #EBFFEA;
}

.hide_in {
    border: 1px dashed #00CC00;
    padding: 3px 3px 3px 3px;
    background: #D1FEC2;
}

Настройка и правила использования:

1. Сразу после установки зайдите в админку модуля и установите "VIP" и "забаненную" группы, по надобности включите/отключите использование модуля репутации или "быстрой кнопки".
Кстати кнопка добавлена на панель бб-кодов только в админке. Почему? Потому что более всего она будет использоваться именно при добавлении новостей с админпанели, в остальных случаях можна обойтись и без неё (так как ради её добавления на все панели бб-кодов, прийдётся значительно усложнить и без того непростую установку.)
2. Хайд нужно формировать таким образом независимо от того включено ли использование модуля репутации:
[hide=10,15,20]скрытый текст[/hide] - скрытие по принципу "или"
[hidden=10,15,20]скрытый текст[/hidden] - скрытие по принципу "и"
где
      10 - требуемая репутация (если отключено в админке, то значение просто небудет учитываться)
      15 - требуемое количество новостей
      20 - требуемое количество комментариев

  Если вы хотите снять зависимость хайда от какого-то параметра - прировняйте его нулю.
  Тоесть текст находящийся под [hide=10,15,0]текст[/hide] или [hidden=10,15,0]текст[/hidden] сможет увидеть пользователь у которого 10 баллов репутации или он опубликовал 15 новостей, от количества комментариев такой хайд зависеть небудет.
  А вот содержимое хайда [hide=0,0,0]текст[/hide] или [hidden=0,0,0]текст[/hidden] смогут увидеть только "VIP" пользователи.

   Приятного использования, надеюсь что модуль Вам понравится.
   Автор модуля - Gauss.
   Сайт поддержки - cmska.org.ua
   Кстати хотелось бы заранее поговорить о тех поддержке модуля. Бывает время, когда я не имею возможности каким либо образом выйти на связь (icq, e-mail, чат...), все мы живём в реальном мире и у всех могут возникнуть екстренные ситуации, именно потому ненужно кричать во все стороны что автора нет в асе уже третий день и что Вас кинули. Я обязательно отвечу на все Ваши вопросы.
   Также стоит вспомнить и о паблике. Если появляется паблик этого модуля - тех поддержка автоматически "отключается".



С уважением, Gauss